package process

import (
	"encoding/json"
	"errors"
	"fmt"
	"go_chat_system/client/utils"
	"go_chat_system/common"
	"net"
)

// 短消息的处理器

type SmsProcess struct {
}

// 发送给所有客户端(除了发送者)群聊消息
func (this *SmsProcess) SendGroupMessage(data string) (err error) {
	// data = {"userId":100,"userName":"admin","password":"","content":"Hello"}
	// 1.反序列化SmsMessage
	var smsMes common.SmsMessage
	err = json.Unmarshal([]byte(data), &smsMes)
	if err != nil {
		err = errors.New("SendGroupMessage Unmarshal SmsMessage Error")
		return
	}

	// 2.遍历所有在线用户 userMgr.onlineUsers
	for id, ap := range userMgr.onlineUsers {
		// 3.过滤接收者
		if id != smsMes.UserId { // 非发送者
			// 4.发送群聊
			err = this.SendToOtherOnlineUser(data, ap.Conn)
			if err != nil {
				err = errors.New(fmt.Sprintf("Send SMSMessage to:%d Error:%v", id, err))
				return
			}
		}
	}
	return
}

// 发送给其他在线用户
func (this *SmsProcess) SendToOtherOnlineUser(data string, conn net.Conn) (err error) {
	mes := common.Message{
		Type: common.SmsMessageReply,
		Data: data,
	}
	b, err := json.Marshal(mes)
	if err != nil {
		err = errors.New("Marshal Message Error")
		return
	}

	err = (&utils.Transfer{
		Conn: conn,
	}).WriteData(b)
	if err != nil {
		err = errors.New("Write Message Error")
		return
	}
	return
}
